]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
st: Use ClutterGrab for StScrollBar implicit grab
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 17 Nov 2021 23:00:26 +0000 (00:00 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Sat, 29 Jan 2022 00:16:29 +0000 (01:16 +0100)
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>

src/st/st-scroll-bar.c

index f7188e8247186f08d32e2ca22ef875f1ae5d5568..47975113068c01b1745055f248eb350aab5a339c 100644 (file)
@@ -54,6 +54,7 @@ struct _StScrollBarPrivate
   gfloat        y_origin;
 
   ClutterInputDevice *grab_device;
+  ClutterGrab *grab;
 
   ClutterActor *trough;
   ClutterActor *handle;
@@ -626,7 +627,12 @@ stop_scrolling (StScrollBar *bar)
 
   st_widget_remove_style_pseudo_class (ST_WIDGET (priv->handle), "active");
 
-  clutter_input_device_ungrab (priv->grab_device);
+  if (priv->grab)
+    {
+      clutter_grab_dismiss (priv->grab);
+      g_clear_pointer (&priv->grab, clutter_grab_unref);
+    }
+
   priv->grab_device = NULL;
   g_signal_emit (bar, signals[SCROLL_STOP], 0);
 }
@@ -663,6 +669,7 @@ handle_button_press_event_cb (ClutterActor       *actor,
 {
   StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (bar);
   ClutterInputDevice *device = clutter_event_get_device ((ClutterEvent*) event);
+  ClutterActor *stage;
 
   if (event->button != 1)
     return FALSE;
@@ -682,7 +689,8 @@ handle_button_press_event_cb (ClutterActor       *actor,
 
   g_assert (!priv->grab_device);
 
-  clutter_input_device_grab (device, priv->handle);
+  stage = clutter_actor_get_stage (actor);
+  priv->grab = clutter_stage_grab (CLUTTER_STAGE (stage), priv->handle);
   priv->grab_device = device;
   g_signal_emit (bar, signals[SCROLL_START], 0);